#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>

void handler(int signo){
  while(1){
    printf("get a signo: %d\n", signo);
    sleep(1);
  }
}
int main(){
  struct sigaction act;
  memset(&act, 0, sizeof(act));

  act.sa_handler = handler;
  //act.sa_handler = SIG_IGN;
  //act.sa_handler = SIG_DFL;

  sigemptyset(&act.sa_mask);
  sigaddset(&act.sa_mask, 3);

  sigaction(2, &act, NULL);//本质是修改当前进程的handler函数指针数组特定内容

  while(1){
    printf("hello linux!\n");
    sleep(1);
  }

  return 0;
}







//void show_pending(sigset_t* set){
//  int i = 1;
//  for(i; i<= 31; i++){
//    if(sigismember(set, i)){
//      printf("1");
//    }
//    else{
//      printf("0");
//    }
//  }
//  printf("\n");
//}
//void handler(int signo ){
//  printf("%d号信号被抵达了，已经处理完成！\n", signo);
//}
//int main(){
//
//  signal(2, handler);
//  sigset_t iset, oset;
//
//  //对集合做清空
//  sigemptyset(&iset);
//  sigemptyset(&oset);
//
//  sigaddset(&iset, 2);//将2号信号写入iset集合
//
//  //1、设置当前进程的屏蔽字
//  //2、获取当前进程老的屏蔽字
//  sigprocmask(SIG_SETMASK, &iset, &oset);
//
//  int count = 0;
//  sigset_t pending;
//  while(1){
//    sigemptyset(&pending);
//
//    sigpending(&pending);
//
//    show_pending(&pending);
//    //printf("hello Linux!\n");
//    sleep(1);
//
//    count++;
//    if(count == 10){
//      sigprocmask(SIG_SETMASK, &oset, NULL);
//      //2号信号的默认动作是终止进程，因此看不到现象
//      printf("恢复2号信号，可以被抵达了\n");
//    }
//  }
//  return 0;
//}
